home *** CD-ROM | disk | FTP | other *** search
/ MACD 5 / MACD 5.bin / workbench / tools / czesc_3 / multiuser / src / library / protection.c < prev    next >
C/C++ Source or Header  |  1994-06-29  |  3KB  |  109 lines

  1. /************************************************************
  2. * MultiUser - MultiUser Task/File Support System                *
  3. * ---------------------------------------------------------    *
  4. * Protection Bits Management                                            *
  5. * ---------------------------------------------------------    *
  6. * © Copyright 1993-1994 Geert Uytterhoeven                        *
  7. * All Rights Reserved.                                                    *
  8. ************************************************************/
  9.  
  10.  
  11. #include <exec/execbase.h>
  12. #include <proto/exec.h>
  13. #include <proto/dos.h>
  14.  
  15. #include "Protection.h"
  16. #include "Misc.h"
  17. #include "Task.h"
  18. #include "Config.h"
  19. #include "Locale.h"
  20. #include "LibHeader.h"
  21.  
  22.  
  23.     /*
  24.      *        Set the Default Protection Bits
  25.      *
  26.      *        Public Library Function
  27.      */
  28.  
  29. BOOL __asm __saveds muSetDefProtectionA(register __a0 struct TagItem *taglist)
  30. {
  31.     struct muTags tags;
  32.  
  33.     if (!InterpreteTagList(taglist, &tags))
  34.         return(FALSE);
  35.     if (tags.Global)
  36.         return(SetLevelDefProtect(tags.Task, tags.DefProtection));
  37.     else
  38.         return(SetTaskDefProtect(tags.Task, tags.DefProtection));
  39. }
  40.  
  41.  
  42.     /*
  43.      *        Get the Default Protection Bits
  44.      *
  45.      *        Public Library Function
  46.      */
  47.  
  48. ULONG __asm __saveds muGetDefProtection(register __d0 struct Task *task)
  49. {
  50.     if (!task)
  51.         task = SysBase->ThisTask;
  52.     return(GetTaskDefProtect(task));
  53. }
  54.  
  55.  
  56.     /*
  57.      *        Set the protection bits for a file or directory
  58.      *
  59.      *        Public Library Function
  60.      */
  61.  
  62. BOOL __asm __saveds muSetProtection(register __d1 STRPTR name,
  63.                                                 register __d2 LONG mask,
  64.                                                 register __a6 struct muBase *muBase)
  65. {
  66.     return(muBase->OLDSetProtection(name, mask, DOSBase));
  67. }
  68.  
  69.  
  70.     /*
  71.      *        Disallow setting the full protection bits
  72.      *
  73.      *        Public Library Function
  74.      */
  75.  
  76. BOOL __asm muLimitDOSSetProtection(register __d0 BOOL flag,
  77.                                               register __a6 struct muBase *muBase)
  78. {
  79.     if (flag)
  80.         muBase->Config.Flags |= muCFGF_LimitDOSSetProtection;
  81.     else
  82.         muBase->Config.Flags &= ~muCFGF_LimitDOSSetProtection;
  83.     return(TRUE);
  84. }
  85.  
  86.  
  87.     /*
  88.      *        Replacement for the dos.library SetProtection() function
  89.      */
  90.  
  91. BOOL __asm __saveds NEWSetProtection(register __d1 STRPTR name,
  92.                                                  register __d2 LONG mask,
  93.                                                  register __a6 struct DosLibrary *dosbase)
  94. {
  95.     BPTR fl;
  96.     struct FileInfoBlock *fib;
  97.  
  98.     if ((muBase->Config.Flags & muCFGF_LimitDOSSetProtection) &&
  99.          (fl = Lock(name, ACCESS_READ))) {
  100.         if (fib = AllocDosObject(DOS_FIB, NULL)) {
  101.             if (Examine(fl, fib))
  102.                 mask = (mask&0x000000ff)|(fib->fib_Protection&0xffffff00);
  103.             FreeDosObject(DOS_FIB, fib);
  104.         }
  105.         UnLock(fl);
  106.     }
  107.     return(muBase->OLDSetProtection(name, mask, dosbase));
  108. }
  109.